/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package snh;

import framework.SThread;
import framework.SocketThread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 *
 * @author jayme
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    String msg = null;
    Thread thread1, thread2;
    SThread sthread;
    SocketThread xthread; 
    NO no;
        
    
        
    public static void main(String[] args) {
        Main m = new Main();
        m.dispara();
        
    }
    
    public void dispara(){
        InetAddress ia = null;
        try{
            ia = InetAddress.getLocalHost();
        }
        catch (UnknownHostException e){
            e.printStackTrace();
        }
        no = new NO(ia.getHostAddress());
        
        // Inicia thread de tratamento de eventos
        sthread = new SThread(no);
        
        
        thread1 = new Thread(sthread);
        thread1.start();
        // Inicia threar de leitura do socket
        xthread = new SocketThread(no.msg, no);
        thread2 = new Thread(xthread);
        thread2.start();
        
        
        int opcao = -1;
        String linha = ""; 
        try {
        
            while(opcao != 0) {
                System.out.println("Escolha uma opção:");
                System.out.println("1 - Inserir nó na rede.");
                System.out.println("2 - Lookup.");
                System.out.println("0 - Digite 0 para sair.");

                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
                
                linha = reader.readLine();  
                opcao = Integer.parseInt(linha);
                
                switch(opcao) {
                    case 1:
                            System.out.println("Digite o endereço de rede de um nó conhecido ou enter para inserir como raiz: ");
                            linha = reader.readLine();  
                            no.pedeInsercao(linha);
                        break;
                    case 2:
                            System.out.println("Digite o número do sistema de nomeação para descobrir o endereço de rede da máquina: ");
                            linha = reader.readLine();
                            no.lookup(Integer.parseInt(linha), no.rede());
                        break;
                    default:
                        break;
                }
                
            }
        }catch (IOException e) {  
            System.out.println("Erro: "+ e);  
        } 
        
        System.out.println("Execução terminada com sucesso.");
        thread1.interrupt();
        thread2.interrupt();
        System.exit(0);
        
    }
  
}
